
function gouzao(x,y){
    this.x=x;
    this.y=y;
}
gouzao.prototype.toString=function(){
 return '('+this.x+','+this.y+')'   
}
var p = new gouzao(1,2)
console.log(p.toString())

class gouzao2{
    constructor(x,y){
        this.x=y;
        this.y=x;
    }
    toString(){
        return '('+this.x+','+this.y+')'
    }
}
var p2 =new gouzao2(1,2)
console.log(p2.toString())

let person = new class{
    constructor(name){
       this.name = name;
    }
    sayname(){
        console.log(this.name)
    }
}('你好是我！')
person.sayname();
// 上面代码中，person是一个立即执行的类的实例

class foo {
    constructor(...args){
        this.args = args;
    }
    *[Symbol.iterator](){
        for(let arg of this.args){
            yield arg;
        }
    }
}
for(let x of new foo('hello','word')){
    console.log(x)
}
// 上面代码中，Foo类的Symbol.iterator方法前有一个星号，表示该方法是一个 Generator 函数。Symbol.iterator方法返回一个Foo类的默认遍历器，for...of循环会自动调用这个遍历器


// calss 的静态方法    ，加上static关键字，就表示该方法不会被实例继承，而是直接通过类来调用，这就称为“静态方法”
class staticFoo{
    static classMethod(){
        console.log('helli')
    }
    static bar(){
        this.baz();
    }
    static baz(){
        console.log('hello 我是静');
    }
    baz(){
        console.log('world 我不是静态')
    }
}
staticFoo.classMethod()//'helli'
var fff = new staticFoo();
//fff.classMethod()//// TypeError: fff.classMethod is not a function
//上面代码表示静态方法只能在类身上调用 不能再实例上调用

//静态方法中包含this的话 这个this指的的类 也不是实例
staticFoo.bar();//hello 我是静  

//父类的静态方法也可以被子类所继承
class Bar extends staticFoo{
      //静态方法也是可以从super对象调用的
      static classMethod(){
          return super.classMethod()+',too';
      }
}
Bar.classMethod()//helli




